package com.niuwa.p2p.core.finance.repay;

import java.math.BigDecimal;
import java.util.Date;
import java.util.List;

import com.niuwa.p2p.entity.business.RepayPlan;


/**
 * 还款接口
 * 业务:
 * 1.面签结束后,截标(放款)时,创建还款计算,并入库(存入DB) =>public List<T> RepayPlan(I loanInfo);
 * 2.每天运行还款计算Batch,如果当期的有逾期,更新当期的逾期费用与还款金额 => public BigDecimal RepayShould(I loanInfoVo, T repayVo, Date repayDay, IRepayCallback repayCallback) throws Exception;
 * 3.上述↑2。Batch运行后,实施自动还款Batch,实施还款.
 * 
 */
public interface IPay<I, T> {

	/** 
	 * 根据借款信息，创建还款计算
	 * 
	 * 
	 * @param loanInfo
	 * @return 还款计划
	 * @exception 业务逻辑Exception
	 */
	public List<T> createRepayPlan(I loanInfo) throws Exception;

	/** 
	 * 根据已经存入DB的当期还款信息和还款日，结合借款信息（合同本金，借款方式等）计算费率，算出当期应还金额
	 * 
	 * @param loanInfo 借款信息
	 * @param repayVo   当期还款信息
	 * @param repaymentDay 还款日
	 * @param repayType 还款类型
	 * @return 还款金额
	 * @exception 业务逻辑Exception
	 */
	public BigDecimal getRepayShould(I loanInfoVo, T repayVo, Date repayDay, IRepayCallback repayCallback) throws Exception;
		
	
	/** 
	 * 当期是否逾期
	 * 
	 * @param repayPlan
	 * @return true:逾期   false:不逾期
	 */
	public boolean isOverdue(RepayPlan repayPlan);
	
}
